home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 26
/
AACD 26.iso
/
AACD
/
Programming
/
AllPlaton
/
Gamedisk3
/
Crackout!
/
CrackOut!.AMOS
/
CrackOut!.amosSourceCode
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
AMOS Source Code
|
1993-06-02
|
36.6 KB
|
1,182 lines
Hide
Dim F(41,12)
Dim SC(100),NAM$(100),C(15)
Global F(),SO,MU,SC,LI,LE,LEV,SPB,PAL,MEM,MV,SV,BSP,KSC,EX,RETEND,I$
If Chip Free+Fast Free>512000 Then MEM=1 Else MEM=0
TITLE
MU=1 : SO=1 : SC=0 : LEV=1 : PAL=1 : MV=63 : SV=63 : BSP=4 : RETEND=0
Load "InGameGraphics.dat",9
Repeat
HISCORE : P=Param
If P=0
Do
MAIN
If Param>0
ENGAME[Param]
If Param=0 : Exit : End If
Else
Exit
End If
Loop
End If
If P=2 Then LEVELEDIT
Until P=1
Erase 3 : Erase 9 : Erase 14
End
Procedure TITLE
If Mouse Key Then Pop Proc
If MEM
Load "RamFound.pic",9
Unpack 9 To 1 : Screen Hide 1
Gr Writing 0 : Ink 12
A$=Str$(Chip Free/1024)-" "+" KB FREE CHIP-RAM DETECTED!"
If Fast Free
B$=Str$(Fast Free/1024)-" "+" KB FREE "
Reserve As Work 16,8 : A=Start(16) : Erase 16
If A<$C00000 : B$=B$+"FAST" : Else B$=B$+"RANGER" : End If
B$=B$+"-RAM DETECTED!"
Text 160-Len(A$)*4,246,A$
Text 160-Len(B$)*4,254,B$
Else
Text 160-Len(A$)*4,254,A$
End If
Screen Open 0,320,256,16,0
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
For A=0 To 15 : Colour A,0 : Next
Fade 5 To 1
Appear 1 To 0,67
End If
Load "Title.dat"
Screen Open 1,16,16,2,0 : Screen Hide 1
No Icon Mask
Dim ST1(17,1),ST2(11,1),R(53),COR(53,1)
Restore
For A=0 To 17
Read ST1(A,0),ST1(A,1)
Next
For A=0 To 11
Read ST2(A,0),ST2(A,1)
Next
If MEM Then Load "Title.mus",3
Load "Title.pic",9
Load "End.sam",5
Sam Bank 5
If MEM=0 Then Goto NOMEM
For A=248 To 8 Step -8
Screen Offset 0,0,256-A
Screen Display 0,,,,A
Wait Vbl
Next
Screen Close 0
Unpack 9 To 0 : Erase 9
Screen Display 0,128,40,320,0
Double Buffer
Screen 1 : Get Palette 0 : Screen 0
For A=0 To 31 : Colour A,0 : Next
Fade 3 To 1
For A=1 To 32
Screen Offset 0,0,256-A*8
Screen Display 0,128,40,320,A*8
If A=25 Then Sam Play 1,1,9000
Wait Vbl
Next
Wait 2
A$="L X=328; F R0=0 To 19; L X=X-16; N R0; "
Bob 0,328,0,2
Channel 0 To Bob 0
Amal 0,A$
Amal On
Repeat : Wait Vbl : Until Amreg(0,0)>9
For A=0 To 31 : Colour A,$FFF : Next
Sam Play 2,2,9000
Repeat : Wait Vbl : Until Amreg(0,0)=20
Paste Icon 142,70,1
Bob 0,8,0, : Wait Vbl
Put Bob 0 : Wait Vbl
Bob Off 0
Fade 3 To 1
For A=0 To 5
B1$=Str$(13+A*4)-" "
B2$=Str$(14+A*4)-" "
B3$=Str$(15+A*4)-" "
B4$=Str$(16+A*4)-" "
A$="A: L X=R0; L Y=R1; A 1,("+B1$+",3)"
A$=A$+"("+B2$+",3)("+B3$+",3)"
A$=A$+"("+B4$+",6)("+B3$+",3)"
A$=A$+"("+B2$+",3)("+B1$+",3)"
A$=A$+"(1,1); F R2=0 T 15; P; N R2; J A;"
Bob 1+A,-10,-10,1
Channel A To Bob 1+A
Amal A,A$
Amreg(A,0)=-10 : Amreg(A,1)=-10
Amal On A : Wait Vbl
Next
A$="A: L X=R0; L Y=R1; A 1,(3,1)(4,1)(5,2)(6,2)(7,2)(8,2)"
A$=A$+"(9,2)(10,2)(11,2)(12,8)(11,2)(10,2)(9,2)(8,2)(7,2)"
A$=A$+"(6,2)(5,2)(4,1)(3,1); F R2=1 T 22; P; N R2; J A;"
For A=6 To 8
Bob 1+A,-10,-10,1
Channel A To Bob 1+A
Amal A,String$("P",(A-6)*4)+"; "+A$
Amreg(A,0)=-10 : Amreg(A,1)=-10
Amal On A
Next
Music 1 : Tempo 16 : Mvolume 0
MV=0 : Screen Close 1
Repeat
Mvolume MV : MV=Min(MV+1,63)
Add C1,1,0 To 5
B=Rnd(17) : Amreg(C1,0)=ST1(B,0)-4 : Amreg(C1,1)=ST1(B,1)-4
Add C2,1,6 To 8
B=Rnd(11) : Amreg(C2,0)=ST2(B,0)-8 : Amreg(C2,1)=ST2(B,1)-8
Wait Vbl
Until Mouse Key
Amal Off : For A=2 To 9 : Bob Off A : Next
Fade 3 : For A=1 To 48 : MV=Min(MV+1,63) : Mvolume MV : Wait Vbl : Next
Bob Off
RTSNOMEM:
Repeat : MV=Min(MV+2,63) : Mvolume MV : Wait Vbl : Until MV=63
A$="L R1=1; Anim 1,(44,3)(43,3)(42,3)(41,3)(40,3)(39,3); "
Screen Close 0
Screen Open 1,320,100,8,0
Curs Off : Flash Off : Cls 0
Palette 0,$FFF,$AAA,$777,0,$8CF,$48C,$248
For B=1 To 3 : For A=0 To 3 : Colour 16+A*4+B,Colour(B) : Next : Next
For A=0 To 3
Sprite A*2,-10,-10,43
Channel A To Sprite A*2
Next
For A=1 To 53
Read R(A)
Next
For A=1 To 53
Read COR(A,0),COR(A,1)
Next
Load "Title.sam",5
Sam Bank 5
B=0 : S=1
For A=1 To 53
For C=0 To 3
If Chanan(C)=0 Then Paste Bob X Sprite(C*2)-144,Y Sprite(C*2)-66,39
Next
X=COR(R(A),0)+30
Y=COR(R(A),1)+20
Wait Vbl : Sprite B*2,X+128,Y+40,44
Sam Play 2,2,27000
Amal B,A$ : Amal On B : Wait 4
Add B,1,0 To 3
If Mouse Key Then Gosub FAST : Goto SKIP
Next
D=0
Wait 20
For C=0 To 3
Paste Bob X Sprite(C*2)-144,Y Sprite(C*2)-66,39
Next
Sprite Off
For A=0 To 7
Sprite A,-10,-10,43
Channel A To Sprite A
Amal A,"L R1=1;" : Amal On A
Next
For A=1 To 36
Read COR(A,0),COR(A,1)
COR(A,0)=COR(A,0)*4+180
COR(A,1)=(COR(A,1)-34)*8+50
Next
A$="L R1=0; A: P; L X=X-4; I X<R0 Jump B; Jump A; B: P; L R1=1; "
For B=0 To 3 : For A=0 To 3 : Colour 16+A*4+B,Colour(B+4) : Next : Next
A=1 : S=2
Repeat
For B=0 To 7
If Amreg(B,1)=1
If A>8
Sam Play 2,1,17000
Paste Bob X Sprite(B)-128,Y Sprite(B)-50,38
End If
If A<37
Sprite B,448,COR(A,1)+50,37
Amal B,A$ : Amal On B : Amreg(B,0)=COR(A,0)+128
Else
Amreg(B,1)=2
End If
Inc A
End If
If Mouse Key Then Gosub FAST : Goto SKIP
Wait Vbl
Next
Until A>44
Wait 5 : Erase 5
Amal Off : Sprite Off
SKIP:
Screen Open 0,320,240,2,0
Curs Off : Flash Off : Cls 0
Screen Display 0,128,150,320,120
EX=0 : Y=128
Set Rainbow 0,1,124,"","",""
For A=0 To 7
Rain(0,A)=A*$222
Next
For A=8 To 112
Rain(0,A)=$FFF
Next
For A=113 To 120
Rain(0,A)=(120-A)*$222
Next
Rainbow 0,0,149,124
MO=1
Do
If MO=1
A$="welcome to" : Gosub PTEX : Add Y,8
A$="crack out!" : Gosub PTEX : Add Y,24
A$="written using amos" : Gosub PTEX
End If
If MO=2
A$="idea graphics levels" : Gosub PTEX : Add Y,4
A$="by h. p. obermeier" : Gosub PTEX : Add Y,12
A$="program music sound" : Gosub PTEX
A$="additonal graphics" : Gosub PTEX : Add Y,4
A$="by c. hodges" : Gosub PTEX
End If
If MO=3
A$="version 1.3" : Gosub PTEX : Add Y,4
A$="03/10/1992" : Gosub PTEX : Add Y,32
A$="copyright 1992" : Gosub PTEX : Add Y,4
A$="hans peter obermeier" : Gosub PTEX
End If
If MO=4
Add Y,16 : A$="enjoy the game!" : Gosub PTEX : Add Y,32
A$="press mouse button" : Gosub PTEX
A$="to load main part!" : Gosub PTEX
End If
If MO=5
Add Y,16 : A$="there is also" : Gosub PTEX : Add Y,8
A$="a cheat mode," : Gosub PTEX : Add Y,16
A$="find it out!" : Gosub PTEX
End If
If MO=6
A$="warning!" : Gosub PTEX : Add Y,24
A$="do not use any" : Gosub PTEX : Add Y,8
A$="freezers!" : Gosub PTEX
End If
Gosub SCROL : Gosub WAI
If EX Then Exit
Add MO,1,1 To 6
Loop
Screen 1 : Fade 3 : Screen 0
Ink 0 : Bar 0,120 To 320,240
EX=0 : Gosub SCROL : Wait Vbl : Rainbow Del
For A=63 To 0 Step -1 : Mvolume A : Wait Vbl : Next
Screen Close 1
Music Off : Screen Close 0
Erase 1 : Erase 2 : Erase 3
Pop Proc
NOMEM:
Unpack 9 To 0 : Erase 9
Screen Display 0,128,40,320,0
Screen 1 : Get Palette 0 : Screen 0
For A=0 To 31 : Colour A,0 : Next : Wait 2
Fade 3 To 1
Load "End.sam",5
Sam Bank 5
Sam Play 1,1,9000
For A=1 To 32
Screen Offset 0,0,256-A*8
Screen Display 0,128,40,320,A*8
Wait Vbl
Next
For A=1 To 31 : Colour A,$FFF : Next : Wait 2
Sam Play 2,2,9000
Paste Bob 8,0,2
Paste Icon 142,70,1
Get Bob 2,0,0 To 1,1
Fade 3 To 1 : Wait 44 : Erase 5
Load "Title.mus",3
MV=0 : Music 1 : Tempo 16 : Mvolume 0
Repeat
MV=Min(MV+1,63) : Mvolume MV : Wait Vbl
Until Mouse Key
Fade 3 : Wait 48
Goto RTSNOMEM
FAST:
Amal Off : Wait Vbl : Sprite Off
If S=2 Then Goto SKIP2
For A=1 To 53
Paste Bob COR(R(A),0)+14,COR(R(A),1)-6,39
Next
For A=1 To 36
Read COR(A,0),COR(A,1)
COR(A,0)=COR(A,0)*4+180
COR(A,1)=(COR(A,1)-34)*8+50
Next
SKIP2:
For A=1 To 36
Paste Bob COR(A,0),COR(A,1),38
Next
Wait Vbl : Erase 5
Return
WAI:
For A=1 To 150
If Mouse Key Then EX=1 : Exit
Wait Vbl
Next
Return
SCROL:
If EX Then Return
Y=128
For A=0 To 120 Step 8
Screen Offset 0,0,A : Wait Vbl
If Mouse Key Then EX=1
Next
Screen Copy 0,0,120,320,240 To 0,0,0
Screen Offset 0,0,0 : Wait 2
Ink 0 : Bar 0,120 To 320,240
Return
PTEX:
X=160-Len(A$)*8
For A=1 To Len(A$)
Paste Icon X,Y,Asc(Mid$(Upper$(A$),A,1))-30
Add X,16
Next
Add Y,16
Return
Data 56,4,9,17,54,51,90,7,124,14,106,71,128,19,162,10,228,5,196,9
Data 219,50,230,59,260,7,298,11,295,65,252,65,140,69,174,65
Data 172,76,218,72,256,71,268,71,308,72,267,107,237,102,204,95,162,97
Data 153,122,200,123,289,70
' CRACK data
Data 4,8,16,45,20,35,22,25,48,32,1,53,30,40,37,34,44,9,52,27,13,15,31
Data 2,6,49,50,33,10,21,46,38,23,29,42,14,3,11,24,36,41
Data 51,5,12,26,39,7,17,28,43,18,47,19
' CRACK 53
Data 4,0,12,0,20,0,36,0,44,0,52,0,76,0,84,0,92,0,116,0
Data 124,0,132,0,148,0,170,0,0,8,36,8,56,8,72,8,96,8,112,8
Data 148,8,164,8,0,16,36,16,44,16,52,16,72,16,80,16,88,16,96,16
Data 112,16,148,16,158,16,0,24,36,24,56,24,72,24,96,24,112,24,148,24
Data 164,24,4,32,12,32,20,32,36,32,56,32,72,32,96,32,116,32,124,32
Data 132,32,148,32,170,32
' OUT 33
Data 1,34,3,34,5,34,10,34,16,34,20,34,22,34,24,34,26,34
Data 1,39,3,39,5,39,11,39,13,39,15,39,23,39
Data 0,35,6,35,10,35,16,35,23,35
Data 0,37,6,37,10,37,16,37,23,37
Data 0,38,6,38,10,38,16,38,23,38
Data 0,36,6,36,10,36,16,36,23,36
End Proc
Procedure HISCORE
Shared SC(),NAM$()
LI=5 : RETEND=0
Load "Hiscores.dat",0
Gosub LEAHISCR
Gosub INITMAINSCR
Gosub INITHISCR
MUS=0
If RANK<101 and MU=1 Then MUS=2 : If Length(14) Then Bank Swap 3,14 Else Load "InHiscore.mus",3
If RANK>100 and MU=1 Then MUS=1 : If Length(3)=0 Then Load "InGame.mus",3
Gosub INITRAIN
Gosub INITLINESCR
Gosub INITSTARS
If MU=1 Then Music 1
M=63 : Volume M
Screen 1 : Colour 18,$444 : Colour 22,$888 : Colour 26,$BBB : Colour 30,$FFF
A=0 : SPR=1 : If RANK>100 Then Goto SKIP
Screen 0 : Fade 1 : Bob Off : Wait Vbl
Cls : Locate 1,4 : Centre "Well done!!!"
Print : Print : Centre "You are one"
Print : Print : Centre "of the Best!!!"
Print : Print : Centre "Please Enter Your Name"
Print : Print : Print : Print " RANK NAME SCORE";
Fade 2,0,$48F,$36C,$248 : Colour 18,$444 : Colour 22,$888 : Colour 26,$BBB : Colour 30,$FFF
SC(RANK)=SC : NAM$(RANK)=" "
X=RANK+12
Screen 1 : Locate 10,X : Print "..............." : Locate 27,X
Print String$("0",8-Len(Str$(SC(RANK))));
Print Mid$(Str$(SC(RANK)),2)
A=0 : B=RANK*8+50 : S=4
Repeat
Add A,S : Wait Vbl : Screen Offset 1,,A : Rainbow 1,A/2,139,102
Amreg(SPR,1)=Rnd(180)+50 : Add SPR,1,1 To 7 : M=Max(10,63-(A/30)) : Mvolume M
If B-A<41 Then S=3
If B-A<21 Then S=2
If B-A<11 Then S=1
Until B=A
Add A,-S : B=0 : A$=""
Do
I$=Upper$(Inkey$)
If Asc(I$)>31 and Asc(I$)<91 and B<15 Then Inc B : A$=A$+I$
If Asc(I$)=8 and B>0 Then Dec B : A$=Left$(A$,B)
If Asc(I$)=13 Then Exit
Amreg(SPR,1)=Rnd(180)+50 : Add SPR,1,1 To 7
Wait Vbl : Locate 10,X : Print A$; : If B=15 Then Print " "; Else Print "-";
If B<14 Then Print ".";
If Flip$(A$)="DAB SI GNITAEHC"
Screen 0 : Cls : Locate 1,4 : Centre Flip$("!dab si gnitaehc ,seY")
Print : Print : Centre "But it is the only way"
Print : Print : Centre "To get futher than the"
Print : Print : Centre "First 10 levels!"
Print : Print : Print : Print " RANK NAME SCORE";
Screen 1
LI=150
A$="YES THATS RIGHT" : CHET=1 : CLEV=1
End If
If Flip$(Left$(A$,13))=" LEVEL TNAW I" and B=15 and CHET=1
CLEV=Min(50,Max(1,Val(Right$(A$,2))))
If CLEV<10 : B$="0" : Else B$="" : End If
A$="OKEY, DOKEY! "+B$+(Str$(CLEV)-" ")
End If
Loop
If A$="" Then A$="!! MR RETURN !!" : B=15
NAM$=A$ : If B<15 Then For C=B To 14 : NAM$=NAM$+" " : Next
NAM$(RANK)=NAM$
Locate 10,X : Print NAM$; : Screen 0 : Fade 1 : Wait 16
Cls : Home
Gosub INITMAINSCR2
SKIP:
Screen 0 : Fade 2,0,$38F,$36C,$248 : Colour 18,$444 : Colour 22,$888 : Colour 26,$BBB : Colour 30,$FFF
Screen 2
B=400 : C=1 : EN=0
Repeat : Add A,1,0 To 904 : Screen Offset 1,,A : Rainbow 1,A/2,139,102 : Wait Vbl
Amreg(SPR,1)=Rnd(180)+50 : Add SPR,1,1 To 7 : Add B,1,0 To 449 : M=Min(M+1,63) : Mvolume M
If B=0 Then Fade 5,0,$FFF,0,$FFF,0,$FFF,0,$FFF
If B=150 Then Fade 5,0,0,$FF0,$FF0,0,0,$FF0,$FF0
If B=300 Then Fade 5,0,0,0,0,$FF,$FF,$FF,$FF
I$=Inkey$ : S=Scancode : If S Then Gosub KEYS
Until EN<>0 or Mouse Key
For C=1 To 7 : Amreg(C,1)=0 : Next
Screen 2 : Fade 1 : Screen 0
E=Min(A/2+102,503)
For B=15 To 0 Step -1
If B=8 Then Fade 2
For C=A/2 To E
D=Rain(1,C) : Rain(1,C)=Max((D and 3840)-256,0)+Max((D and 240)-16,0)+Max((D and 15)-1,0)
Next
View : Wait Vbl
Next
If CHET=1 Then LEV=CLEV
Amal Off : Wait Vbl : Sprite Off : Bob Off : Wait Vbl
Screen Close 0 : Screen Close 1 : Rainbow Del : Screen Close 2
For A=M To 0 Step -1 : Wait Vbl : Mvolume A : Next : Music Off
If MUS=2 and MEM=0 Then Erase 3
If MUS=2 and MEM=1 Then Bank Swap 3,14
Poke $BFD100,$7D : Poke $BFD100,$75 : P=Peek($BFE001)
If(P and 12)=12 and RANK<101 Then Gosub SAVHISCR
Erase 1
If EN=0
End If
If EN=0 and LEV<51 and CHET=0 Then ENTACCESSCODE
If EN=0 or EN=2 Then Goto EXIPROC
Screen Open 0,320,9,2,0
Curs Off : Cls 0 : Centre " Thanx for Playing..."
Palette 0,0 : Screen Display 0,,140,,
Fade 2,0,$FFF : Wait 250 : Fade 2 : Wait 32 : Screen Close 0
Goto EXIPROC
End
KEYS:
If S=80 Then Gosub MUSONOFF
If I$=Chr$(27) Then EN=1
If S=81 Then Gosub SOUONOFF
If S=82 Then Gosub LEVELS
If S=83 Then EN=2
Return
LEVELS:
If LEV<51 Then LEV=51 : S$="Editor" Else LEV=1 : S$="Normal"
Screen 0 : Locate 8,10 : Print S$ : Screen 2
Return
MUSONOFF:
If MU=0 Then MU=1 : M$="on!" Else MU=0 : M$="off"
Screen 0 : Locate 14,9 : Print M$ : Screen 2
Return
SOUONOFF:
If SO=0 Then SO=1 : S$="on!" Else SO=0 : S$="off"
Screen 0 : Locate 31,9 : Print S$ : Screen 2
Return
INITLINESCR:
Screen Open 2,320,9,8,Lowres
Curs Off : Flash Off : Cls 0 : Paper 0
Palette 0,0,0,0,0,0,0,0 : Screen Display 2,,241,,9
Writing 1
Pen 1 : Centre "Welcome to Crack out!!!!"
Pen 2 : Centre "A Game by H. P. Obermeier and C. Hodges"
Pen 4 : Centre "Press Button to Start"
Writing 0
Return
LEAHISCR:
Open In 1,"Hisc.dat"
For A=1 To 100
NAM$(A)=Input$(1,15)
A$=Input$(1,4)
SC(A)=Leek(Varptr(A$))
Next
Close 1
Return
SAVHISCR:
Open Out 1,"Hisc.dat"
For A=1 To 100
B=Varptr(SC(A))
Print #1,NAM$(A)+Chr$(0)+Chr$(Peek(B+1))+Chr$(Peek(B+2))+Chr$(Peek(B+3));
Next
Close 1
Return
INITHISCR:
Screen Open 1,320,1009,2,Lowres
Flash Off : Curs Off : Cls 0 : Palette 0,$8FF
Screen Display 1,,140,,100 : RANK=101
For A=100 To 1 Step -1
If SC(A)<SC Then RANK=A : SC(A)=SC(A-1) : NAM$(A)=NAM$(A-1)
Locate 5,A+12 : Print A : Locate 10,A+12 : Print NAM$(A) : Locate 27,A+12
Print String$("0",8-Len(Str$(SC(A))));
Print Mid$(Str$(SC(A)),2)
Next
Return
INITMAINSCR:
Screen Open 0,320,105,4,Lowres
Flash Off : Paper 0 : Pen 1 : Curs Off : Cls 0
Screen Display 0,128,36,,
Palette 0,0,0,0
INITMAINSCR2:
Bob 1,85,0,5 : Locate 1,8
If MU=0 Then M$="off" Else M$="on!"
If SO=0 Then S$="off" Else S$="on!"
Print : Centre "F1 Music "+M$+" F2 Sound "+S$
If LEV<51 Then M$="Normal" : LEV=1 Else M$="Editor" : LEV=51
Print : Centre "F3 "+M$+" Levels F4 Editor "
Print : Print : Print " RANK NAME SCORE";
Return
INITRAIN:
Set Rainbow 1,1,504,"","",""
R=60 : B=60 : G=30 : RS=-1 : GS=-4 : BS=-3
For A=0 To 503
Rain(1,A)=((R/4)*256)+((G/4)*16)+(B/4)
Add R,RS : Add G,GS : Add B,BS
If R<0 Then R=0 : RS=3
If R>60 Then R=60 : RS=-1
If G<0 Then G=0 : GS=4
If G>60 Then G=60 : GS=-2
If B<0 Then B=0 : BS=1
If B>60 Then B=60 : BS=-4
Next
Return
INITSTARS:
Autoback 0
A$="A: P; L X=X-R0; I X<110 J N; J A; N: L X=488; L Y=R1; J A; "
For A=1 To 7
Sprite A,Rnd(352)+112,Rnd(200)+40,1
Channel A To Sprite A : Amal A,A$
Next
For A=1 To 7
Sprite A,Rnd(320)+128,Rnd(180)+50,4-(A+1)/3.5
Next
Wait Vbl : Amal On
For A=1 To 7 : Amreg(A,0)=(A+3)/1.4 : Amreg(A,1)=Rnd(180)+50 : Next
Return
EXIPROC:
End Proc[EN]
Procedure LEVELEDIT
Shared C()
Unpack 9 To 0
Screen Hide 0
For X=0 To 17
Get Cblock X+1,X*8,0,8,16
Next
For A=0 To 15 : C(A)=Colour(A) : Next
Screen Open 1,320,16,16,Lowres
Paper 0 : Flash Off : Curs Off : Cls : Palette 0,$FFF
For A=0 To 15 : Colour A,0 : Next
FL$="(FFF,2)(EEE,2)(DDD,2)(CCC,2)(BBB,2)(AAA,2)(999,2)(888,2)(999,2)(AAA,2)(BBB,2)(CCC,2)(DDD,2)(EEE,2)"
Wait Vbl : Flash 17,FL$
Wait Vbl : Flash 18,FL$
Wait Vbl : Flash 19,FL$
For A=1 To 18 : Put Cblock A,A*8-8,0 : Next
LEV=51 : LL=50 : LE=51
Locate 19,0 : Print "LO SA +- LEVEL:";LE;" ";
Locate 19,1 : Print "AD VE";
Screen Open 0,320,192,16,Lowres
Curs Off : Paper 0 : Flash Off : Cls 0
Screen Display 0,128,67,320,192
For A=0 To 15 : Colour A,C(A) : Next
Screen 1 : Fade 3 To 0 : Screen 0
For X=0 To 39
For Y=0 To 11
F(X,Y)=0
Put Cblock F(X,Y)+1,X*8,Y*16
Next
Next
A=6 : X=1 : Gosub CHGBLOCK
Wait Vbl : Flash 17,FL$
Wait Vbl : Flash 18,FL$
Wait Vbl : Flash 19,FL$
Limit Mouse 128,50 To 447,258
Change Mouse 2
Show On : Screen 0 : CHG=0
Do
M=Mouse Key : X=(X Mouse-129)/8 : Y=Y Screen(Mouse Screen,Y Mouse-1)/16
If Mouse Screen=1 and M and A<>X Then Gosub CHGBLOCK : M=0
If Mouse Screen=0 and M=1 Then CHG=1 : F(X,Y)=A : Put Cblock A+1,X*8,Y*16
If Mouse Screen=0 and M=2 Then CHG=1 : F(X,Y)=0 : Put Cblock 1,X*8,Y*16
EX=(Inkey$=Chr$(27))
If EX and CHG Then ALERT["Level not saved!","Quit out!","Sorry man!"] : If Param=1 Then CHG=0 Else Gosub BLITZ
If EX and CHG=0 Then Exit
Loop
Hide On
Screen 1 : Fade 4 : Screen 0 : Ink 0
For B=0 To 9
For A=0 To 31 : Draw A*10+B,0 To A*10+B,192 : Next
Wait Vbl
Next
Screen Close 1 : Screen Close 0
Pop Proc
End
CHGBLOCK:
If X=19 or X=20 Then Gosub LADELEVEL
If X=22 or X=23 Then Gosub SPEICHERELEVEL
If X=25 Then LE=Min(LE+1,99) : Wait 13-M*4
If X=26 Then LE=Max(LE-1,51) : Wait 13-M*4
Screen 1 : Locate 19,0 : Print "LO SA +- LEVEL:";LE;" ";
Locate 19,1 : Print "AD VE";
If X>17 Then Screen 0 : Return
Put Cblock A+1,A*8,0
Box X*8,0 To X*8+7,15 : Screen 0 : A=X
Return
LADELEVEL:
A$="Levels/"+Mid$(Str$(LE),2)
If Exist(A$)=0 Then X=26 : ALERT["No Level"+Str$(LE)+" on this disk!","It doesn't matter!","Shit!"] : Goto BLITZ
If LL=LE and CHG=0 Then ALERT["Level already loaded!","Aha!","Alles Banane?"] : Goto BLITZ
If CHG=1 Then ALERT["Last changes not saved!","Load it anyway","Ooops!"] : If Param=2 Then Goto BLITZ
Erase 6 : Reserve As Work 6,480
Bload "Levels/"+Mid$(Str$(LE),2),6
C=Start(6)
For XX=0 To 39
For YY=0 To 11
F=Peek(C) : Inc C : If F<>F(XX,YY) Then Put Cblock F+1,XX*8,YY*16
F(XX,YY)=F
Next
Next
LL=LE : Erase 6 : CHG=0
Return
SPEICHERELEVEL:
If LL=LE and CHG=0 Then ALERT["No changes made!","I'll make some!","Sorry!"] : Goto BLITZ
A$="" : Poke $BFD100,$7D : Poke $BFD100,$75 : P=Peek($BFE001)
If(P and 12)<>12 Then ALERT["Disk is write protected!","I'll remove it!","Let it be!"] : If Param=1 Then Goto SPEICHERELEVEL Else Goto BLITZ
If Exist("Levels/"+Mid$(Str$(LE),2)) Then Gosub SURE : If Param=2 Then Return
For XX=0 To 39
For YY=0 To 11
A$=A$+Chr$(F(XX,YY))
Next
Next
Bsave "Levels/"+Mid$(Str$(LE),2),Varptr(A$) To Varptr(A$)+480
CHG=0
Return
SURE:
Erase 6 : Reserve As Work 6,480
Bload "Levels/"+Mid$(Str$(LE),2),6
C=Start(6)
For XX=0 To 39
For YY=0 To 11
F=Peek(C) : Inc C : If F<>F(XX,YY) Then Put Cblock F+1,XX*8,YY*16
Next
Next
ALERT["Level Exists already!!!","Kill it!","Forget it!"]
C=Start(6)
For XX=0 To 39
For YY=0 To 11
F=Peek(C) : Inc C : If F<>F(XX,YY) Then Put Cblock F(XX,YY)+1,XX*8,YY*16
Next
Next
Return
BLITZ:
For C=1 To 15 : Colour C,$FFF : Next : Fade 1 To 1
Return
End Proc
Procedure ALERT[T$,YES$,NO$]
Hide
Screen Open 2,320,40,8,0
Curs Off : Paper 0 : Flash Off : Cls 0
Palette 0,$F80,$F00,$F0,$FFF
Screen Display 2,128,-10,,
Flash 1,"(F80,50)(000,50)"
Ink 1 : Box 0,0 To 319,39 : Box 1,1 To 318,38
Box 2,2 To 317,37
Pen 4 : Locate 0,1 : Centre T$
Pen 3 : Locate 10-Len(YES$)/2,3 : Print YES$
Pen 2 : Locate 30-Len(NO$)/2,3 : Print NO$
For A=-10 To 40 Step 2
Wait Vbl : Screen Display 2,128,A,,
Next
Repeat : M=Mouse Key : Until M
For A=40 To -10 Step -2
Wait Vbl : Screen Display 2,128,A,,
Next
Screen Close 2 : Show
End Proc[M]
Procedure MAIN
Load "Levels/NormLev.dat",15
Load "InGameSprites.dat",0
Load "InGame.sam",5
If Length(3)=0 : Load "InGame.mus",3 : End If
Unpack 9 To 0
Screen Hide 0
For X=0 To 17
Get Cblock X+1,X*8,0,8,16
Next
Screen Open 1,320,9,2,Lowres
Curs Off : Cls 0 : Palette 0,0
Print "BALLS: 05";At(12,);"SCORE: 0000000";At(30,);"LEVEL: 01";
Fade 1,0,$FFF : Wait 8
Screen Open 0,336,208,16,Lowres
Curs Off : Paper 0 : Flash Off : Cls 0
Screen Display 0,112,58,336,208
For X=0 To 41
For Y=0 To 12
F(X,Y)=99
Next
Next
Limit Mouse 128+300,59 To 128+300,230
A$=A$+"A: P; L X=X+R0; L Y=Y+R1; I X<128 J B; I X>448 J C; "
A$=A$+"F: I Y<66 J D; I Y>250 J E; J A; B: L X=128; L R0=0-R0; L R3=1; J F; "
A$=A$+"C: I R2=0 J A; L R3=2; J C; D: L Y=66; L R1=0-R1; L R3=1; J A; "
A$=A$+"E: L Y=250; L R1=0-R1; L R3=1; J A;"
Make Mask
Sprite 4,0,0,1
Channel 1 To Sprite 4
Amal 1,A$
A$=""
A1$="A: P; L X=X+R0; L Y=Y+R1; I X<135 J B; I X>400 J C; F: I Y<72 J D; "
A1$=A1$+"I Y>250 J E; J A; B: L X=135; L R0=0-R0; J F; "
A1$=A1$+"C: L X=400; L R0=0-R0; J F; D: L Y=72; L R1=0-R1; J A; "
A1$=A1$+"E: L Y=250; L R1=0-R1; J A;"
A2$="A: P; I X<RA J H; I X>RA J I; J: I Y<RB J K; I Y>RB J L; G: I X<135 J B; "
A2$=A2$+"I X>400 J C; F: I Y<72 J D; I Y>250 J E; J A; H: L X=X+1; J J;"
A2$=A2$+"I: L X=X-1; J J; K: L Y=Y+1; J G; L: L Y=Y-1; J G; B: L X=135; J F; "
A2$=A2$+"C: L X=400; J F; D: L Y=72; J A; E: L Y=250; J A; "
Sprite 6,0,0,13
Channel 2 To Sprite 6
Amal 2,A1$
If RETEND=0 Then SC=0 : LE=LEV
SLE=LE
Amreg(2,0)=1 : Amreg(2,1)=1 : LED=0 : Volume 15,SV
C=0 : Gosub LADELEVEL : AN=8
If LE>25 Then Amal 2,A2$
NELI=SC/100000+1
If MU=1 Then Music 1 : Mvolume MV : Tempo 17
Ink 4 : Box 8,0 To 336,207 : Box 15,7 To 336,200
Ink 12 : Box 9,1 To 336,206 : Box 14,6 To 336,201
Ink 11 : Box 10,2 To 336,205 : Box 13,5 To 336,202
Ink 10 : Box 11,3 To 336,204 : Box 12,4 To 336,203
NEWLIVE:
Amreg(1,2)=1 : KSP=0 : AN=8 : BAP=0 : AUT=0 : RX=-BSP : RY=BSP
Amreg(1,0)=RX : Amreg(1,1)=RY
U=3 : Gosub DISPLAY
Gosub NEWLIVE2
Amreg(1,2)=0 : Amreg(1,3)=0 : V=0 : Wait Vbl : Amreg(1,2)=1 : C=0
Amal On : MA=0 : MY=0
Do
Wait Vbl : RX=Amreg(1,0) : RY=Amreg(1,1) : M=Mouse Key : Add BL,1,0 To 10
If AN<>Min(Max(AN+KSP,0),8) and SO=1 Then Play 8,24-(AN+KSP),0
If AUT=1 Then Y Mouse=Y Sprite(4)-12
A=F(Max(X Sprite(6)-128,0)/8,Max(Y Sprite(6)-65,0)/16)>0
If A and QC=0 Then Amreg(2,0)=-Amreg(2,0) : Amreg(2,1)=-Amreg(2,1) : QC=1
If A=0 Then QC=0
AN=Min(Max(AN+KSP,0),8) : U=0
MY=Max(Min(Y Mouse,222+AN),67-AN) : V=MA-MY
Amreg(0)=X Sprite(4) : Amreg(1)=Y Sprite(4)
X=Min((X Sprite(4)-124+RX)/8,39)
Y=Min((Y Sprite(4)-65+RY)/16,11)
Sprite 2,428,MY,2+AN : I$=Inkey$
F=F(X,Y) : GL=Max(GL-1,0)
If M=2 Then Gosub PAUSE
If M=1 Then AUT=0
If Amreg(1,3)=1 Then Inc SC : U=1 : Amreg(1,3)=0 : If SO Then Sam Play 2,1,5000+Rnd(2000)
Exit If Amreg(1,3)=2
A=Sprite Col(4,2 To 2) : If A and C=0 Then C=1 : Gosub BOUNCE
If A=0 Then C=0
A=Sprite Col(6,4 To 4) : If A and C2=0 Then Swap RX,RY : C2=Amreg(2,1) : Amreg(2,1)=Amreg(2,0) : Amreg(2,0)=C2 : C2=1 : If SO Then Sam Play 4,4,5000
If A=0 Then C2=0
If I$<>"" Then Gosub KEYS
If F>0 Then Gosub BLOCK
Amreg(1,0)=RX : Amreg(1,1)=RY
MA=MY : If ST<1 Then Exit
If U Then Gosub DISPLAY
Loop
Amreg(1,3)=0
If ST<>0
For A=AN To 8 : Sprite 2,428,MY,A+2 : Wait Vbl : Next
If SO : Sam Play 4,3,5000 : End If
For A=1 To 6 : Sprite 2,427,MY,A+18 : Wait Vbl : Wait Vbl : Next
Sprite Off 2 : Wait 4
End If
If ST>0 and LI>1 Then Dec LI : Gosub NORMAL : Goto NEWLIVE
If ST=0 and SO Then Sam Play 1,5,9000
If ST=0
Inc LI : Amal Freeze : Inc LE
If LE=51
Screen 1 : Fade 1 : Wait 16 : Screen 0 : Fade 1 : Wait 16
If MU=1
For A=MV To 0 Step -1 : Mvolume A : Wait Vbl : Next
End If
Amal Off : Sprite Off : Music Off
Screen Close 0 : Screen Close 1 : Wait Vbl
Erase 1 : Erase 5 : Erase 6
PP=805847 : Goto EXIPROC
End If
If LE=100 : LE=1 : LI=5 : End If
Wait Vbl : Gosub LADELEVEL
Goto NEWLIVE
End If
Dec LI : U=3 : Gosub DISPLAY
Amal Off : Wait Vbl : Sprite Off
Screen 0 : Double Buffer : X=-50 : RX=0
For A=-62 To 60 Step 3 : Y=A : Gosub GAMEOVER : Next
Screen 1 : Fade 3
B=MV
For A=63 To 0 Step -1
B=Max(B-1,0) : If MU Then Mvolume B
Gosub GAMEOVER
Next
Music Off
For A=0 To 50 : Gosub GAMEOVER : Next
Screen 0 : Fade 3
For A=60 To 200 Step 3 : Y=A : Gosub GAMEOVER : Next
Wait Vbl : Screen Close 0 : Screen Close 1 : Wait Vbl
Erase 1 : Erase 5 : Erase 6
PP=0
Goto EXIPROC
NORMAL:
Fade 3,,,,,,,,,,,,,,,,,,$124,$346,$457,$679,$89B,$9AC,$BCE,,,,,,,,
Return
BAP:
Fade 3,,,,,,,,,,,,,,,,,,$412,$643,$754,$976,$B98,$CA9,$ECB,,,,,,,,
Return
GAMEOVER:
X=X+RX : If X>0 Then Dec RX
If X<0 Then Inc RX
Bob 1,136+X/5,Y,12 : Wait Vbl
Return
BLOCK:
SX=(X Sprite(4)-124)*4 : SY=(Y Sprite(4)-61)*4
For A=0 To 3
SX=SX+RX
SY=SY+RY
If F(SX/32,SY/64)=0 Then AX=SX/32 : AY=SY/64
Next : F2=0
If F=17 Then AUT=1 : KSP=1 : BAP=0 : Gosub NORMAL
If F=16 Then LI=LI+1 : U=1 : KSP=1 : BAP=0 : AUT=0 : Gosub NORMAL : If SO Then Sam Play 4,5,8000
If F=15 Then KSP=1 : BAP=1 : AUT=0 : Gosub BAP
If F=14 Then KSP=-1 : BAP=0 : AUT=0 : Gosub NORMAL
If F=13 Then KSP=1 : BAP=0 : AUT=0 : F(39,BL)=12 : Put Cblock 13,328,BL*16+8 : F(39,BL+1)=12 : Put Cblock 13,328,BL*16+24 : Gosub NORMAL
If F>12 and F<18 and SO Then Sam Play 1,6,10000
If F=6 Then Add SC,100 : Inc U : F2=Rnd(4)+13 : Gosub RANDOM : If SO Then Sam Play 2,4,8500+Rnd(1000)
If F>6 and F<11 Then Add SC,100 : Inc U : F2=F+1 : Gosub RANDOM : If SO Then Sam Play 2,1,5000+Rnd(2000)
If F<6 or F=11 or F>12 Then Add SC,Min(F,5)*250 : Inc U : If SO Then Sam Play 2,2,7500+Rnd(1000)
If F<6 or F=11 Then Dec ST
If F=12 Then Add SC,2 : Inc U : F2=12 : If SO Then Sam Play 2,1,5000+Rnd(2000)
If AX<>X Then RX=-RX
If AY<>Y Then RY=-RY
F(X,Y)=F2 : Put Cblock F2+1,X*8+16,Y*16+8
Return
PAUSE:
P=1 : Amal Freeze
Bob 1,150,83,14 : Bob 2,142,108,18 : Bob 3,142,118,15
Bob 4,191,118,17-SO : Bob 5,191,108,17-MU : Wait Vbl
MUA=MU : SOA=SO
Repeat
Y Mouse=MY : I$=Inkey$ : Gosub KEYS
If Mouse Key=1 or ST=-1 Then P=0
If MUA<>MU Then MUA=MU : Bob 5,191,108,17-MU : Wait Vbl
If SOA<>SO Then SOA=SO : Bob 4,191,118,17-SO : Wait Vbl
Until P=0
Repeat : Until Mouse Key=0
Bob Off
Amal On
Return
KEYS:
If I$="p" and P=1 Then P=0 : Return
If I$="p" and P=0 Then Gosub PAUSE : Return
If I$=Chr$(27) Then ST=-1 : Return
If I$="s" and SO=0 Then SO=1 : Return
If I$="s" and SO=1 Then SO=0 : Return
If I$="m" and MU=1 Then MU=0 : Mvolume 0 : Return
If I$="m" and MU=0 and Length(3)<>0 Then MU=1 : Mvolume MV : Return
If I$="m" and MU=0 Then Amal Freeze : Load "InGame.mus",3 : Music 1 : Tempo TM : Mvolume MV : MU=1 : If P=0 Then Gosub PAUSE : Return
If I$="n" Then MV=Max(MV-1,10) : If MU Then Mvolume MV : Return
If I$="j" Then MV=Min(MV+1,63) : If MU Then Mvolume MV : Return
If I$="a" and SV>25 Then Add SV,-2 : Volume 15,SV : Sam Play 2,1,5000 : Return
If I$="w" and SV<63 Then Add SV,2 : Volume 15,SV : Sam Play 2,1,5000 : Return
If I$="l" and LED=0 Then Led On : LED=1 : Return
If I$="l" and LED=1 Then Led Off : LED=0 : Return
If I$=Tab$ and PAL=1 Then Poke $DFF1DC,$20 : PAL=0 : Return
If I$=Tab$ and PAL=0 Then Poke $DFF1DC,0 : PAL=1 : Return
Return
NEWLIVE2:
WAI=0 : Amal Freeze 1
If SO Then Sam Play 1,4,10000
Do
MA=MY : M=Mouse Key
Wait Vbl : MY=Max(Min(Y Mouse,222+AN),67-AN) : Sprite 2,128+300,MY,2+AN
Sprite 4,128+292,MY+12,1 : Amreg(0)=X Sprite(4) : Amreg(1)=Y Sprite(4)
Inc WAI : If WAI>200 or M=1 or ST=-1 Then Exit
I$=Inkey$ : If I$<>"" Then Gosub KEYS
If MA<>MY Then RY=Sgn(MY-MA)*Abs(RY) : Amreg(1,1)=RY
If M=2 Then Gosub PAUSE
A=F(Max(X Sprite(6)-128,0)/8,Max(Y Sprite(6)-65,0)/16)>0
If A and QC=0 Then Amreg(2,0)=-Amreg(2,0) : Amreg(2,1)=-Amreg(2,1) : QC=1
If A=0 Then QC=0
Loop
MY=0 : MA=0 : Amal On
If SO Then Sam Play 4,3,10000+Rnd(4000)
Return
BOUNCE:
If RX<0 Then C=1 : Return
If BAP=1 Then C=0 : Gosub NEWLIVE2
If SO=1 Then Sam Play 4,3,10000+Rnd(4000)
RX=-RX : C=1 : SC=SC+50 : U=1
RY=RY-Sgn(V) : If RY=0 Then RY=RY-Sgn(V)
RY=Min(Max(-5,RY),5)
Return
LADELEVEL:
Fade 3
U=3 : Gosub DISPLAY
If LE=10 and SLE<>10 Then SHOACCESSCODE["XOBNAELC"]
If LE=20 and SLE<>20 Then SHOACCESSCODE["EMAGTSOL"]
If LE=30 and SLE<>30 Then SHOACCESSCODE["YOBOLLEH"]
If LE=40 and SLE<>40 Then SHOACCESSCODE["EMAGDOOG"]
If LE<51 Then Goto NORMALLEVELS
ST=0 : If Exist("Levels/"+Mid$(Str$(LE),2))=0 Then Add LE,1,1 To 99 : If LE=1 Then LI=5 : Goto LADELEVEL Else Goto LADELEVEL
Erase 7 : Reserve As Work 7,480
Bload "Levels/"+Mid$(Str$(LE),2),7
A=Start(7) : Wait 45
For X=0 To 39
For Y=0 To 11
F=Peek(A) : Inc A
If F<>F(X,Y) Then Put Cblock F+1,X*8+16,Y*16+8
F(X,Y)=F : If F>0 and F<12 and F<>6 Then Inc ST
Next
Next
Erase 7
BACK:
For A=0 To 11
If F(0,A)=0 Then Sprite 6,0,A*16+58,13
Next
Fade 3,0,$FFF,$E00,$800,$333,$F,$6,$D0,$40,$DDD,$BBB,$888,$666,$215,$42A,$63F,0,$124,$346,$457,$679,$89B,$9AC,$BCE,0,$444,$666,$777,$999,$BBB,$CCC,$EEE
Return
NORMALLEVELS:
ST=0 : X=0 : Y=0 : D=Start(15)+Deek(Start(15)+((LE-1)*2)) : Wait 45
Do
E=Peek(D) : F=E and 31 : Inc D
For A=0 To E/32
If F<>F(X,Y) Then Put Cblock F+1,X*8+16,Y*16+8
F(X,Y)=F
If F>0 and F<12 and F<>6 Then Inc ST
Inc Y
If Y>11 Then Y=0 : Inc X : If X>39 Then X=0 : Y=0 : Exit 2
Next
Loop
If LE=25 Then Amal 2,A2$
Goto BACK
RANDOM:
If AX<>X Then RX=-RX
If AY<>Y Then RY=-RY
Return
DISPLAY:
If NELI*100000<SC Then Inc LI : Inc NELI : U=2 : If SO Then Sam Play 1,5,8000
Screen 1
If U>1 Then S$=Mid$(Str$(Min(LI,99)),2) : Print At(7,0);String$("0",2-Len(S$));S$;
S$=Mid$(Str$(SC),2)
Print At(19,0);String$("0",7-Len(S$));S$;
If U>2 Then S$=Mid$(Str$(LE),2) : Print At(37,0);String$("0",2-Len(S$));S$;
Screen 0
Return
EXIPROC:
End Proc[PP]
Procedure SHOACCESSCODE[C$]
Wait 48
Screen Open 2,320,17,2,0
Curs Off
Palette 0,0
Screen Display 2,128,0,320,16
Centre "WELL DONE! THE ACCESS CODE FOR" : Print
Centre "THE NEXT LEVEL IS "+Flip$(C$)
Fade 3,0,$FFF
For A=20 To 140 Step 5
Screen Display 2,128,A,320,16
Wait Vbl
Next
Wait 360
For A=140 To 20 Step -5
Screen Display 2,128,A,320,16
Wait Vbl
Next
Screen Close 2
End Proc
Procedure ENGAME[CODE]
If CODE<>805847 Then End
If Length(3) Then Bank Swap 3,15
Load "End.dat",0
Load "End.mus",3
Load "End.sam",5
SO=1 : MU=1
Screen Open 0,320,200,8,0
Paper 0 : Flash Off : Curs Off : Cls : Hide
Palette 0,0,0,0,0,0,0,0
Global S,EX,I$
A$=A$+"A: P; L X=X+R0; L Y=R1/5+Y; L R1=R1+1; "
A$=A$+" I Y>250 J B; "
A$=A$+" J A; "
A$=A$+"B: L R2=0; P; I R2=1 J A; J B;"
For N=0 To 13
Sprite N+8,0,0,1 : Channel N To Sprite N+8 : Amal N,A$
Next
Poke $DFF1DC,$20
A$="A: F R0=0 To 36; N R0; L X=Z(255)+25; L Y=Z(127)+10; "
A$=A$+" A 1,(2,3)(3,4)(4,20)(3,4)(2,3)(0,1); J A; "
Bob 1,-10,-10,4 : Bob 2,-10,-10,4
Channel 14 To Bob 2 : Channel 15 To Bob 1 : Amal 14,A$ : Amal 15,"PPPPPPPPPPPPP;"+A$
For A=0 To 75
X=Rnd(320) : Y=Rnd(170) : C=Rnd(2)+1
Gosub STAR
Next
Paper 0 : Pen 1 : Gr Writing 0 : Print
CT["WELL DONE!"] : Print : Print
CT["YOU HAVE COMPLETED ALL 50 LEVELS."] : Print : Print
CT["WE HOPE YOU ENJOYED PLAYING THIS GAME!"] : Print : Print
CT["HAVE YOU KNOWN: CHEATING IS BAD?"] : Print : Print : Print
CT["PRESS ESC TO ABORT GAME,"] : Print : Print
CT["F1 TO PLAY THE EDITOR LEVELS"] : Print : Print
CT["OR F2 TO RESTART AT LEVEL 1"] : Print : Print
CT["BUT MORE DIFFICULT!"]
Double Buffer : Amal On 14 : Amal On 15 : Music 1
Volume 30
KSC=0 : I$="" : EX=0
If MU Then Mvolume 63 Else Mvolume 0
Fade 3,0,$444,$888,$FFF,0,$444,$888,$FFF : Led Off : COUNT=0
Repeat
If COUNT<50 Then Gosub ROCKETS
If COUNT=50 Then Gosub REINIT
If COUNT>50 Then WAI[70] : Gosub FARBE
Inc COUNT
Until EX
If KSC=80 Then LE=51 : BSP=4
If KSC=81 Then LE=1 : BSP=5
If MU=0 Then Music Off
Fade 4 : For A=63 To 0 Step -1 : Mvolume A : Wait Vbl : Next
Amal Off : Sprite Off : Bob Off : Music Off : Screen Close 0
Erase 3 : Erase 1 : Erase 5
If Length(15) Then Bank Swap 3,15
PP=1 : RETEND=1 : Add LI,10
If I$=Chr$(27) Then PP=0
Goto EXIPROC
ROCKETS:
A=Rnd(24) : If SO Then Sam Raw 2,Start(5)+20,8000,9000-A*75
SPR[0,159,190,Rnd(3)-2,-30-Rnd(13)]
WAI[A+35] : If EX Then Return
If SO Then Sam Raw 2,Start(5)+8200,8500,8000
X=X Sprite(8)-128 : Y=Y Sprite(8)-50 : Amal Freeze 0 : Sprite 8,0,0,3
For A=1 To 13
If Amreg(A,2)=0 Then SPR[A,X,Y,Rnd(5)-3,Rnd(29)-25]
Next
FARBE:
C=Rnd(7) : If C=0 Then Fade 2,0,$444,$888,$FFF
If C=1 Then Fade 2,0,$440,$880,$FF0
If C=2 Then Fade 2,0,$400,$800,$F00
If C=3 Then Fade 2,0,$40,$80,$F0
If C=4 Then Fade 2,0,$404,$808,$F0F
If C=5 Then Fade 2,0,$24,$48,$8F
If C=6 Then Fade 2,0,$44,$88,$FF
If C=7 Then Fade 2,0,$420,$840,$F80
WAI[Rnd(19)+20]
Return
REINIT:
WAI[50]
Amal Off : Wait Vbl : Sprite Off : Bob 1,-10,-10,4 : Bob 2,-10,-10,4
Wait Vbl : Bob Off
For A=0 To 15
Bob A,-10,-10,4
Channel A To Bob A
Amal A,String$("P",A*2)+";"+A$
Next
Amal On
Return
STAR:
Plot X,Y,C : Plot X-1,Y,Max(C-1,0) : Plot X+1,Y,Max(C-1,0)
Plot X,Y-1,Max(C-1,0) : Plot X,Y+1,Max(C-1,0) : Plot X-2,Y,Max(C-2,0)
Plot X+2,Y,Max(C-2,0) : Plot X,Y-2,Max(C-2,0) : Plot X,Y+2,Max(C-2,0)
Return
EXIPROC:
End Proc[PP]
Procedure SPR[N,X,Y,SX,SY]
R=Rnd(2)+2 : If N=0 Then R=3
Amreg(N,2)=1 : Sprite N+8,X+128,Y+50,R : Amal On N : Amreg(N,0)=SX : Amreg(N,1)=SY
End Proc
Procedure WAI[T]
If EX Then Pop Proc
For A=1 To T
Repeat
C=Rnd(4096) : R=C/256 : G=(C-R*256)/16 : B=C-R*256-G*16
Until R+B+G>15
D=Rnd(3)*4
Colour 19+D,C : Colour 18+D,(R/2)*256+(G/2)*16+B/2 : Colour 17+D,(R/3)*256+(G/3)*16+B/3
Wait Vbl : I$=Inkey$ : KSC=Scancode : If KSC=80 or KSC=81 or(I$=Chr$(27)) Then EX=1 : Exit
If I$="s" and SO=0 Then SO=1 : I$=""
If I$="s" and SO Then SO=0
If I$="m" and MU=0 Then MU=1 : I$="" : Mvolume 63
If I$="m" and MU Then MU=0 : Mvolume 0
Next
End Proc
Procedure CT[T$]
X=160-Len(T$)*4 : Y=Y Curs*8+2
Ink 7,0 : Text X-1,Y-1,T$ : Text X,Y-1,T$ : Text X-1,Y,T$
Ink 5 : Text X,Y+1,T$ : Text X+1,Y+1,T$ : Text X+1,Y,T$
Ink 6 : Text X+1,Y-1,T$ : Text X-1,Y+1,T$ : Ink 0 : Text X,Y,T$
End Proc
Procedure ENTACCESSCODE
Screen Open 1,320,200,2,0
Curs Off : Flash Off : Paper 0 : Cls 0 : Pen 1
Palette 0,$FFF,$FFF,$FFF
Locate 1,10
Centre "PLEASE ENTER LEVEL ACCESS CODE! "
Screen Open 0,352,224,4,0
Curs Off : Flash Off : Paper 0 : Cls 0
Palette 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Screen Display 0,128,50,320,192
SCROL$="L R0=0; L R1=0; A: L X=R0/14+305; P; L R0=R0+R1;"
SCROL$=SCROL$+" I R0<70 J B; L R1=R1-1; J A; B: L R1=R1+1; J A; "
Channel 1 To Screen Offset 1
X=Free
Amal 1,SCROL$
For Y=0 To 13
For X=0 To 22
Ink 1+((X+Y) and 1) : Bar X*16,Y*16 To X*16+15,Y*16+15
Next
Next
Dual Playfield 0,1 : Dual Priority 1,0
Screen 1
Ink 1 : Box 126,94 To 193,104
Locate 16,12 : Print "--------"
Screen 0
Fade 3,0,$111,$222,0,0,0,0,0,0,$FFF
Amal On 1
C$=""
CX=1 : CY=1 : CXS=2 : CYS=2 : CXT=0 : CYT=0
Flash 1,"(111,95)(222,1)(333,1)(444,1)(333,1)(222,1)"
Flash 2,"(222,95)(333,1)(444,1)(555,1)(444,1)(333,1)"
Screen 1
LEV=1
Repeat
Wait Vbl
Screen Offset 0,CX,CY
Add CX,CXS,1 To 31 : Add CY,CYS,1 To 31
Inc CXT : Inc CYT
If Rnd(50)=0 and CXT>30 Then CXS=-CXS : CXT=0
If Rnd(50)=0 and CYT>30 Then CYS=-CYS : CYT=0
A$=Upper$(Inkey$)
If(A$>=" ") and(A$<="Z") and Len(C$)<8 Then C$=C$+A$
If A$=Chr$(8) Then C$=Left$(C$,Len(C$)-1)
If(A$<>Chr$(13)) and Len(C$)<8 Then P$=C$+"-" Else P$=C$
Locate 16,12 : Print P$
Until A$=Chr$(13)
C$=Flip$(C$)
If C$="XOBNAELC" Then LEV=10
If C$="EMAGTSOL" Then LEV=20
If C$="YOBOLLEH" Then LEV=30
If C$="EMAGDOOG" Then LEV=40
Screen 0 : Flash Off
Fade 3 : Wait 50 : Amal Off : Wait Vbl : Screen Close 1 : Screen Close 0
End Proc